var path = require("path")
var fs = require("fs")


// 文件读取
// path.join(__dirname, "../data/1.txt")  //=> 相对于当前文件查找目标文件


// .readFile(url , encode , callback) 读取文件内容
//   url 为需要读取的文件路径
//   ecnode 需要采用哪种字符编码集来进行内容读取
//   callback 当文件读取完毕之后的回调函数   
//           该回调函数会接收两个形参   error,data
//           第一个形参为读取失败时的错误信息
//           第二个形参为读取成功时的文本内容

// 异步写法
// fs.readFile(path.join(__dirname, "../data/1.txt"), "utf-8", function (err, data) {
//     if (err) throw err
//     console.log("读取成功:异步", data)
// })
// // 同步写法
// var data = fs.readFileSync(path.join(__dirname, "../data/1.txt"), "utf-8")
// console.log("读取成功:同步", data)

// ->
// PS C:\Users\14449\Desktop\HTML5\study\HTML-2213(二阶段)\html-2213-part2\day35_node\office> node .\fs.js
// 读取成功:同步 ��hello world
// 读取成功:异步 ��hello world

//---------------------------------------------------------------------------------

// .fs.writeFile(filename,data,[options],callback)
// filename  String 文件名
// data      String|buffer  //需要写入的数据
// option    Object
//         encoding  String |null   default='utf-8'
//         flag      String         default='w' //1、默认"w"(直接写入数据，会清空原有数据)  2、{ 'flag': 'a' } 可重复写入数据
//        flag属性
//            w ：写入文件，文件不存在则创建，存在则清空；
//            wx ：和w一样，但是文件存在时会报错；
//            w+ ：读取并写入文件，文件不存在则创建，存在则清空；
//            wx+ ：和w+一样，但是文件存在时会报错；
//            a ：以追加方式写入文件，文件不存在则创建；
//            ax ：和a一样，但是文件存在时会报错；
//            a+ ：读取并追加写入文件，文件不存在则创建；
//            ax+ ：和a+一样，但是文件存在时会报错。
//  callback 动作执行完后的回调函数

// 写入文件(也可以新增文件 => 没有就新增)
// fs.writeFile(path.join(__dirname, "../data/1.txt"), "我爱学习,我爱node", {
//     encoding: "utf-8",// 编码
//     flag: "w",  // 以什么形式写入数据(默认"w")  w  a
// }, function (err) {
//     if (err) throw err
//     console.log("写入成功")
// })

// 以追加形式写入文件 flag="a"
// fs.appendFile(path.join(__dirname, "../data/1.txt"), "我爱学习,我爱node", {
//     encoding: "utf-8",
//     // flag:"a",  // 默认"a"
// }, function (err) {
//     if (err) throw err
//     console.log("写入成功")
// })

// fs.unlink(url,callback)  => 有就删除 没有就报错
// fs.unlink(path.join(__dirname, "../data/1.txt"), function (err) {
//     if (err) throw err
//     console.log("删除成功")
// })

//-----------------------------------------------------------------------

// 文件夹

// 文件夹读取 (directory => 文件夹)
// __dirname 当前文件所在的目录
fs.readdir(path.join(__dirname), function (err, list) {
    if (err) throw err
    console.log("读取成功", list)
})

// fs.readdir(path.join(__dirname, "../data"), function (err, list) {
//     if (err) throw err
//     console.log("读取成功", list)
// })

// 新增文件夹  (没有就新增 => 有就报错(新增之前判断文件是否存在))
// fs.mkdir(path.join(__dirname, "../data/1111"), function (err) {
//     if (err) throw err
//     console.log("新增成功")
// })

// 删除文件夹 (有就删除 => 没有就报错)
// fs.rmdir(path.join(__dirname, "../data/1111"), function (err) {
//     if (err) throw err
//     console.log("删除成功")
// })

// 每次操作文件/文件夹之前 => 判断文件/文件夹是否存在
// fs.exists(path.join(__dirname, "../data/1111"), function (result) {
//     console.log(result)
// })

// console.log(fs.existsSync(path.join(__dirname, "../data/1111")))
// console.log(fs.existsSync(path.join(__dirname, "../data/1.txt")))

// fs.rename(oldUrl , newUrl , callback) 修改文件名/目录名   (注:当新的路径和旧的路径不相同时,则会移动文件  )

// fs.rename(path.join(__dirname, "../data/1111"), path.join(__dirname, "../data/2222"), function (err) {
//     if (err) throw err
//     console.log("修改成功")
// })

// .stat(url , callback) 获取文件/目录的相关信息
//     url  为需要获取信息的文件/目录 的路径
//     callback  为读取完毕后的回调函数
//         第一个形参error为读取失败时的错误信息
//         第二个形参info  为读取成功时的相关信息对象
//             该info对象下有两个方法
//                 isFile() 方法用来判断是否为文件
//                 isDirectory() 方法用来判断是否为目录
//                 isBlockDevice()	如果是块设备返回 true，否则返回 false。
//                 isCharacterDevice()	如果是字符设备返回 true，否则返回 false。
//                 isSymbolicLink()	如果是软链接返回 true，否则返回 false。
//                 isFIFO()	如果是FIFO，返回true，否则返回 false。FIFO是UNIX中的一种特殊类型的命令管道。
//                 isSocket()	如果是 Socket 返回 true，否则返回 false。

// fs.stat(path.join(__dirname, "../data/2222"), function (err, info) {
//     if (err) throw err
//     console.log(info.isDirectory())
// })

// fs.stat(path.join(__dirname, "../data/1.txt"), function (err, info) {
//     if (err) throw err
//     console.log(info.isFile())
// })
